package jp.co.nes.awssupport.business.annotation;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * BillingCsvBeanのフィールドに設定するアノテーションです。<br>
 * 設定したフィールドに対応するCSVのcolumnのcategory、nameを、category属性とname属性に設定します。<br>
 * 設定したフィールドに対応するCSVのcolumnが必須で必要かどうかをrequired属性に設定します。<br>
 * name属性は省略可能であり、省略した場合は、先頭を大文字に変更したフィールド名が使用されます。<br>
 * required属性は省略可能であり、省略した場合は、必須で必要になります。<br>
 * なお、required属性については、通常省略(必須で必要)しますが、columnが出力されない場合があるフィールドが存在するので、
 * そのような場合に、falseを設定します。
 */
@Retention(RUNTIME)
@Target(FIELD)
public @interface BillingCsvField {

    /**
     * 設定したフィールドに対応するCSVのcolumnのcategoryを返却します。
     *
     * @return 設定したフィールドに対応するCSVのcolumnのcategory
     */
    public String category();

    /**
     * 設定したフィールドに対応するCSVのcolumnのnameを返却します。
     *
     * @return 設定したフィールドに対応するCSVのcolumnのname
     */
    public String name() default "";

    /**
     * 設定したフィールドに対応するCSVのcolumnが必須で必要な場合、trueを返却します。
     *
     * @return true: 必須で必要な場合, false: 必須で必要でない場合
     */
    public boolean required() default true;
}
